home *** CD-ROM | disk | FTP | other *** search
/ Deutsche Edition 1 / Deutsche Edition 1.iso / amok / amok_lha / amok33.lha / Ersatzquelle / PrinterSupport.mod < prev    next >
Text File  |  1993-08-15  |  5KB  |  163 lines

  1. (*********************************************************************
  2.  *                                                                   *
  3.  *  :Program.    PrinterSupport.mod                                  *
  4.  *  :Author.     Michael Frieß                                       *
  5.  *  :Address.    Kernerstr. 22a                                      *
  6.  *  :Address.    7000 Stuttgart 1                                    *
  7.  *  :shortcut.   [mif]                                               *
  8.  *  :Version.    2.01                                                *
  9.  *  .Modified.   [gs] Anpassung an m2c 3.2d                          *
  10.  *  :Date.       12.10.89                                            *
  11.  *  :Copyright.  PD                                                  *
  12.  *  :Language.   Modula-II                                           *
  13.  *  :Translator. M2Amiga                                             *
  14.  *  :Contents.   PrinterSupport                                      *
  15.  *  :update.     update from V1.0 of Fridtjof Siebert [fbs]          *
  16.  *                                                                   *
  17.  *********************************************************************)
  18.  
  19. IMPLEMENTATION MODULE PrinterSupport;
  20. (* (C) Copyright 1988 by Michael Frieß & Fridtjof Siebert *)
  21.  
  22. FROM Arts        IMPORT TermProcedure, Assert;
  23. FROM SYSTEM      IMPORT ADR, LONGSET, CAST;
  24. FROM Exec        IMPORT
  25.         IOStdReq, MsgPortPtr, OpenDevice, CloseDevice,
  26.         write, DoIO, UByte;
  27. FROM ExecSupport IMPORT
  28.         CreatePort, DeletePort,
  29.         CreateExtIO, DeleteExtIO;
  30. FROM Graphics    IMPORT RastPortPtr, ColorMapPtr, ViewModeSet;
  31. FROM Printer     IMPORT
  32.         IODRPReq, IOPrinter, ris, dumpRPort, Special, SpecialSet,
  33.         printerName, rawWrite, prtCommand;
  34.  
  35. CONST copyright =
  36. "MODULE PrinterSupport: (C) Copyright 1988 by M.Frieß & F.Siebert";
  37.  
  38. TYPE IOMode = (Standard, Dump, Command);
  39.      printerIO = RECORD
  40.                   CASE      : IOMode OF
  41.                    Standard :
  42.                      std    : IOStdReq |
  43.                    Dump     :
  44.                      dmp    : IODRPReq |
  45.                    Command  :
  46.                      cmd    : IOPrinter;
  47.                   END;
  48.                  END;
  49.  
  50. VAR PrtPort : MsgPortPtr;
  51.     PrtMsg  : POINTER TO printerIO;
  52.     PrtInit : BOOLEAN;
  53.  
  54.  
  55. PROCEDURE ClosePrinter;
  56. BEGIN
  57.  IF PrtInit THEN          (* Bitte nur einmal schließen ! *)
  58.   CloseDevice (PrtMsg);
  59.   DeleteExtIO (PrtMsg);
  60.   DeletePort (PrtPort);
  61.   PrtInit := FALSE;
  62.  END;
  63. END ClosePrinter;
  64.  
  65.  
  66. PROCEDURE OpenPrinter;
  67. BEGIN
  68.   PrtPort := CreatePort (ADR("PrinterSupport"),0);
  69.   Assert (PrtPort # NIL, ADR("MODUL PrinterSupport: cannot create PrtPort"));
  70.   PrtMsg  := CreateExtIO (PrtPort, SIZE(printerIO));
  71.   IF PrtMsg = NIL THEN
  72.     DeletePort (PrtPort);
  73.     Assert (FALSE, ADR("MODUL PrinterSupport: cannot create ExtIO"));
  74.   END;
  75.   WITH PrtMsg^.cmd DO
  76.    command    := prtCommand;
  77.    prtCommand := ris;
  78.    parm0      := 0;
  79.    parm1      := 0;
  80.    parm2      := 0;
  81.    parm3      := 0
  82.   END;
  83.   OpenDevice (ADR (printerName), 0, PrtMsg, LONGSET{0});
  84.   TermProcedure (ClosePrinter);
  85.   PrtInit := TRUE
  86. END OpenPrinter;
  87.  
  88.  
  89. PROCEDURE PrintString (s : ARRAY OF CHAR);
  90. BEGIN
  91.   WITH PrtMsg^.std DO
  92.    command := write;
  93.    data    := ADR(s);
  94.    length  := HIGH(s) + 1
  95.   END;
  96.   DoIO (PrtMsg)
  97. END PrintString;
  98.  
  99.  
  100. PROCEDURE PrintRaw (s : ARRAY OF CHAR);
  101. BEGIN
  102.   WITH PrtMsg^.std DO
  103.    command := rawWrite;
  104.    data    := ADR(s);
  105.    length  := HIGH(s) + 1
  106.   END;
  107.   DoIO (PrtMsg)
  108. END PrintRaw;
  109.  
  110.  
  111. PROCEDURE PrintChar (c : CHAR);
  112. BEGIN
  113.   WITH PrtMsg^.std DO
  114.    command := rawWrite;
  115.    data    := ADR(c);
  116.    length  := 1
  117.   END;
  118.   DoIO (PrtMsg)
  119. END PrintChar;
  120.  
  121.  
  122. PROCEDURE PrintCommand (Cmd : CARDINAL;
  123.                         p0, p1, p2, p3 : UByte);
  124. BEGIN
  125.   PrtMsg^.cmd.command    := prtCommand;
  126.   WITH PrtMsg^.cmd DO
  127.    prtCommand := Cmd;
  128.    parm0      := p0;
  129.    parm1      := p1;
  130.    parm2      := p2;
  131.    parm3      := p3
  132.   END;
  133.   DoIO (PrtMsg)
  134. END PrintCommand;
  135.  
  136.  
  137. PROCEDURE DumpRPort (rp: RastPortPtr; cm: ColorMapPtr;
  138.                     Modes: ViewModeSet; x,y,w,h: CARDINAL;
  139.                     c,r: LONGINT; s: SpecialSet);
  140. (* Procedure is still not tested! *)
  141.  
  142. BEGIN
  143.   WITH PrtMsg^.dmp DO
  144.     command := dumpRPort;
  145.     rastPort := rp;
  146.     colorMap := cm;
  147.     (* next line looks a bit weird, but I found no other way to do this: *)
  148.     modes     := Modes;
  149.     srcX      := x;
  150.     srcY      := y;
  151.     srcWidth  := w;
  152.     srcHeight := h;
  153.     destCols  := c;
  154.     destRows  := r;
  155.     special   := s;
  156.   END;
  157.   DoIO (PrtMsg);
  158. END DumpRPort;
  159.  
  160. BEGIN
  161.  PrtInit := FALSE;
  162. END PrinterSupport.
  163.